package test;

public class CalcFunction {
	    private String result;
	
	    public void calc(String s){
	    	if(s.indexOf("+")>-1){
	    		int i=s.indexOf("+");
	    		if(s.indexOf("+",i+1)==i+1){
	    			throw new IllegalArgumentException("Input error! Don't like 1++1");//��ʽ����ʱ�׳��쳣
	    			}else{
	    				add(s);
	    				}
	    		}
	        if(s.indexOf("-")>-1){
		        	int i=s.indexOf("-");            
		            if(s.indexOf("-",i+1)==i+1){           
		            	throw new IllegalArgumentException("Input error! Don't like 1++1");//��ʽ����ʱ�׳��쳣
		               }else{
		            	   substract(s);
		               }
		        
	        }
	        if(s.indexOf("*")>-1){
		        	int i=s.indexOf("*");            
		            if(s.indexOf("*",i+1)==i+1){           
		            	throw new IllegalArgumentException("Input error! Don't like 1++1");//��ʽ����ʱ�׳��쳣
		               }else{
		            	   multiply(s);
		               }     
	        }
	        if(s.indexOf("��")>-1){
		        	int i=s.indexOf("��");            
		            if(s.indexOf("��",i+1)==i+1){           
		            	throw new IllegalArgumentException("Input error! Don't like 1++1");//��ʽ����ʱ�׳��쳣
		               }else{
		            	   divide(s);
		               } 
	        }
	        System.out.println(getResult());
	    }
	    
	    
	    public void add(String s)//�ӷ�
	    {
	        String[] str=s.split("[+]");
	        if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//����
	        {
	        	String[] str1=str[0].split("[/]");
	        	String[] str2=str[1].split("[/]");
	        	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//��ĸ��Ϊ��
	        	{
	        		result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str1[1]))+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));      	
	        	}else{
	        		throw new IllegalArgumentException("Divisor cannot be zero!");//����Ϊ��ʱ�׳��쳣
	        	}
	        }
	        else{//����
	 	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
	            {	           
	 	    	   result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+""; 
	 	    	   }       	
	        
	       else{
	    	   throw new IllegalArgumentException("overrun!");}//��ֵ��Χ����ʱ�׳��쳣
	       } 
	        
	    }
	    
	    public void substract(String s)//����
	    {
	        String[] str=s.split("[-]");
	        if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//����
	        {
	        	String[] str1=str[0].split("[/]");
	        	String[] str2=str[1].split("[/]");
	        	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//��ĸ��Ϊ��
	        	{
	        		result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))-(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));    	
	        	}else{
	        		throw new IllegalArgumentException("Divisor cannot be zero!");//����Ϊ��ʱ�׳��쳣
	        	}
	        }
	        else{//����
	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
	            {
	    	   result = Integer.parseInt(str[0])-Integer.parseInt(str[1])+"";
	    	   }       	
	        
	       else{
	    	   throw new IllegalArgumentException("overrun!");}//��ֵ��Χ����ʱ�׳��쳣
	       }
	    }
	    
	    
	    public void multiply(String s)//�˷�
	    {
	        String[] str=s.split("[*]");
	        if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//����
	        {
	        	String[] str1=str[0].split("[/]");
	        	String[] str2=str[1].split("[/]");
	        	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//
	        	{
	            	result =simplefraction(Integer.parseInt(str1[0])*Integer.parseInt(str2[0]),Integer.parseInt(str1[1])*Integer.parseInt(str2[1]));    	
	        	}else{
	        		throw new IllegalArgumentException("Divisor cannot be zero!");//����Ϊ��ʱ�׳��쳣
	        	}
	  
	        }
	        else{//����
		 	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
		            {	            result = Integer.parseInt(str[0])*Integer.parseInt(str[1])+"";   }       	
		        
		       else{
		    	   throw new IllegalArgumentException("overrun!");}//��ֵ��Χ����ʱ�׳��쳣
	        	
	        	}
	    }
	    
	    
	    public void divide(String s)//����
	    {
	        String[] str=s.split("[��]");
	        
	        if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//����
	        {
	        	String[] str1=str[0].split("[/]");
	        	String[] str2=str[1].split("[/]");
	        	if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//��ĸ��Ϊ��
	        	{
	            	result =simplefraction(Integer.parseInt(str1[0])*Integer.parseInt(str2[1]),Integer.parseInt(str1[1])*Integer.parseInt(str2[0]));  	
	        	}else{
	        		throw new IllegalArgumentException("Divisor cannot be zero!");//����Ϊ��ʱ�׳��쳣
	        	}
	  
	        }else{
	        	if(Integer.parseInt(str[1]) != 0){//����
			 	       if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
			            {	            
			 	    	   result = Integer.parseInt(str[0])/Integer.parseInt(str[1])+"";
			            }       	
			        
			       else{
			    	   throw new IllegalArgumentException("overrun!");}
	                         		
	        	}else {
	        		
	        		throw new IllegalArgumentException("Divisor cannot be zero!");   //����Ϊ��ʱ�׳��쳣  	
	        	}
	        }
	    }
    
    public String getResult()
    {
        return result;
    } 
	    
	
    public static int GCD(int m, int n) {//�ݹ鷨�����Լ��
        if(m % n == 0){
            return n;
        }else{
            while(m != n){
                if(m > n)m = m - n;
                else n = n - m;
            }
        }
        return m;
}
    public static int LCM(int m, int n){//����С������
        return m * n / GCD(m,n);
    }
    
    static String simplefraction(int m, int n){ //�������
    String s;
    int num = GCD(m, n);
            m = m / num;
            n = n / num;
    if (n == 1) {
        s = m + "";
    } else {
        s = m + "" + "/" + n + "";
    }
    return s;
}
	
}